/**
 * 抽象结构，用于定义对象的类型.不提供实现
 * 行为的抽象
 */


namespace b {

    /***
     * 可索引
     */
    interface Person333 {
        [index: string]: string;
    }
    const p: Person333 = {1:"a",2:"b"}
    p[0]
    /***
     * 额外属性
     */
    interface Config {
        color?: string;
        width?: number;
        [propName: string]: any;
    }
    let options:Config = { colour: "red", width: 100,a:"" };

    /***
     * 函数型接口
     * 
    */

    interface IA{
        (a:string):void
    }


    /***
     * 属性接口是一种描述对象属性的接口，用来规范对象的属性名、属性类型和属性值等信息
     * 可选属性
     * 只读属性
     */

    // interface AB{
    //     name:string,
    //     readonly age:number,
    // }
    // const b:AB ={age:1}
    // b.name = ""

    /****
     * 
     * 类接口,实现多接口。接口继承接口
     */
    //  interface AB{
    //     action():void;
    // }
    // interface AC extends AB{
    //     action2():void
    // }
    
    // class AClass implements AC{
    //     action(): void {
    //         console.log("")
    //         // throw new Error("Method not implemented.");
    //     }
    //     action2(): void {
            
    //     }
    // }



    /****
     *  不建议做
     * 接口继承类
     */
    // class A{
    //     private name:string="";
    //     // action(){}
    // }
    // interface IA extends A{
    //     name:string;
    // }




    /////创建类方式========
    // class Person {
    //     constructor(public name: string) { }
    // }
    // interface WithNameClass {
    //     // 修饰普通函数不用加new，修饰构造函数要加new
    //     new(name: string): any;
    // }
    // function created(cla: WithNameClass, name: string): void {
    //     return new cla(name);
    // }
    // let res = created(Person, '张三');
    // console.log(res); // Person { name: '张三' }

}


